import dayjs from "dayjs";

/**
	 * 时间格式化
	 * @param {number} 11位时间戳
	 * @param {string} 格式化规则 默认值：YYYY-MM-DD HH:mm:ss
	 * @returns {string} 格式化后的结果
	 */
export const dateFormat = (value: string | number, format = 'YYYY-MM-DD HH:mm:ss'): string => {
	if (!dayjs(value).isValid()) {
		return '时间解析异常';
	};
	return dayjs(value).format(format);
};

/**
 * 根据日期，返回今天/明天/后天/xx月xx日
 * @param {number} value 11位时间戳
 * @param {string} format 不满足条件的兜底格式化方式 默认值：YYYY-MM-DD HH:mm:ss
 * @returns {string} 格式化后的结果
 */
export const sortDateString = (value: number, fromat = 'MM月DD日'): string => {
	const m = {
		'0': '今天',
		'1': '明天',
		'2': '后天'
	};
	const target = dayjs(new Date(value).toLocaleDateString());
	const now = dayjs(new Date().toLocaleDateString());
	const diff = target.diff(now, 'day');
	if (String(diff) in m) {
		return m[String(diff) as keyof typeof m];
	};
	return dayjs(value).format(fromat);
};

/**
 * 获取某个时间戳是周几
 * @param {string} value 13位时间戳
 * @param {string} appendStr 填充文字，如周 星期
 * @returns {string} demo：周一
 */
export const weekString = (value : number, appendStr = '周') => {
	return appendStr + ['日','一','二','三','四','五','六'][new Date(value).getDay()];
};

/**
 * 小于10补‘0’
 * @param {number | string} value 要处理的目标值
 * @returns {result} 前面补充0后的结果
 */
export const padStartZero = (value: string | number): string => {
	return Number(value) < 10 ? `0${value}` : `${value}`;
};

/**
 * 手机号脱敏
 */
export function mobileDestn(phonenumber: string): string {
	if (typeof phonenumber !== 'string') {
		throw new Error('Filters->mobileDestn第一个参数格式错误，请传入字符串类型数据');
	};
	return phonenumber.replace(/(\d{3})\d{4}(\d{4})/, `$1****$2`);
};

/**
 * 字符串脱敏
 */
export function destn (value : string, pre = 4, after = 4) : string {
	return `${value.substring(0, pre)}` + '*'.repeat(value.length - pre - after) + `${value.substring(value.length - after)}`;
}	

/**
 * 数字转小数点字符串
 * @param {number} value 要处理的目标值
 * @param {number} decimal 保留小数点后几位 默认值：2
 * @returns {result} 前面补充0后的结果
 */
export function numberToFixed(value: number, decimal = 2): string {
	if (typeof value !== 'number') {
		throw new Error('数据类型错误');
	};
	return value.toFixed(decimal);
}

/**
 * 处理数字只能输入小数点后2位
 * @param {number} val 要处理的目标值
 * @returns {result} 
 */
export function inputDigit(val : number | string, decimal = 2) : string{
	let valStr = String(val);
	const dotIndex = valStr.indexOf('.');
	if(dotIndex !== -1){
		valStr = valStr.substring(0, (dotIndex + decimal + 1));
	};
	return valStr;
}

/**
 * 整数处理 不能超过10000
 * @param {number} val 要处理的目标值
 * @param {number} maxNum 整数部分最大不能超过n位数,默认4位数10000，最多9999
 * @returns {result} 
 */
export function inputInteger(val : number | string, maxNum = 4) : string{
	const list = String(val).split('.');
	if(list[0].length > maxNum){
		list[0] = list[0].slice(0,maxNum);
	};
	return list.join('.');
}